/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-02-21
 * Time: 23:09
 */
class Solution {
//     动态规划
//     (滚动数组, 空间复杂度为 O(1))
//     用三个变量分别记录 用三种颜色粉刷的各自的成本
//     注意 修改当前的成本时, 要先把当前成本记录下, 因为后面会用到
    public int minCost(int[][] costs) {
        int length=costs.length;
        // 分别记录使用三种颜色的成本
        int first=costs[0][0];
        int second=costs[0][1];
        int third=costs[0][2];
        for(int i=1;i<length;i++){
            // 修改成本前, 先记录一下, 后面会用到
            int temp1=first;
            first=costs[i][0]+Math.min(second, third);
            int temp2=second;
            // 注意这里面求最小值, 用的都是 之前的值, 不是最新的值
            second=costs[i][1]+Math.min(temp1, third);
            third=costs[i][2]+Math.min(temp1, temp2);
        }
        return Math.min(first, Math.min(second, third));
    }
}
